
package clientereligadora.entidades;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;

import org.jdesktop.swingx.JXMapViewer;
import org.openstreetmap.gui.jmapviewer.JMapViewer;

/**
 * Creates a selection rectangle based on mouse input
 * Also triggers repaint events in the viewer
 * @author Martin Steiger
 */
public class SelectionAdapter extends MouseAdapter 
{
	private boolean dragging;
	private JXMapViewer viewer;

	private Point2D startPos = new Point2D.Double();
	private Point2D endPos = new Point2D.Double();

	/**
	 * @param viewer the jxmapviewer
	 */
	public SelectionAdapter(JXMapViewer viewer)
	{
		this.viewer = viewer;
	}

    public SelectionAdapter(JMapViewer jMapViewer1) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

	@Override
	public void mousePressed(MouseEvent e)
	{
		if (e.getButton() != MouseEvent.BUTTON3)
			return;

		startPos.setLocation(e.getX(), e.getY());
		endPos.setLocation(e.getX(), e.getY());

		dragging = true;
	}

	@Override
	public void mouseDragged(MouseEvent e)
	{
		if (!dragging)
			return;

		endPos.setLocation(e.getX(), e.getY());

		viewer.repaint();
	}

	@Override
	public void mouseReleased(MouseEvent e)
	{
		if (!dragging)
			return;

		if (e.getButton() != MouseEvent.BUTTON3)
			return;

		viewer.repaint();

		dragging = false;
	}

	/**
	 * @return the selection rectangle
	 */
	public Rectangle getRectangle()
	{
		if (dragging)
		{
			int x1 = (int) Math.min(startPos.getX(), endPos.getX());
			int y1 = (int) Math.min(startPos.getY(), endPos.getY());
			int x2 = (int) Math.max(startPos.getX(), endPos.getX());
			int y2 = (int) Math.max(startPos.getY(), endPos.getY());

			return new Rectangle(x1, y1, x2-x1, y2-y1);
		}

		return null;
	}

}